# -*- coding: utf-8 -*-
"""
@Author: CPS
@Date: 2020-08-07 17:11:05
@Last Modified by: CPS
@Last Modified time: 2020-08-07 22:52:44
@file_path D:\CPS\MyProject\Electron-fileWatcher\src\python\icon.py
@Filename D:\CPS\MyProject\Electron-fileWatcher\src\python\icon.py/icon.py
"""

import sys
import os
import xml.dom.minidom


##
# @brief      将 AxureRP9.exe 导出的svg图标进行处理,去除 p和path标签上所有的transform属性, svg 添加
#             viewbox="0 0 width heith" #
#
# @param      inputFile  The input dir
# @param      options 对象
#               ext 要处理的文件格式,
#               addTarget 要添加的标签(还没添加该功能)
#               ddAttr 要添加的属性(还没添加该功能)
#               removeTaget 删除属性的标签
#               removeAttr 要删除的属性,
# @param      outputDir  The output dir #
#
# @return     { description_of_the_return_value } #
#
def updateSvg(inputFile, options={
    'ext': ['.svg'],
    'target': ['g', 'path'],
    'removeAttr': ['transform']
}, outputDir=0):
    if not os.access(inputFile, os.F_OK):
        return print('请检查文件是否存在')

    # 打开xml文档
    filename = os.path.basename(inputFile)

    if outputDir == 0:
        outputDir = os.path.join(os.path.dirname(inputFile), 'output')

    if not os.access(outputDir, os.F_OK):
        # 创建目录
        os.mkdir(outputDir)

    # 解析xml,生成dom实例
    if os.path.splitext(inputFile)[1] in options['ext']:
        DOM = xml.dom.minidom.parse(inputFile)
    else:
        return print('文件不是要处理的格式')

    # 得到文档元素对象
    root = DOM.documentElement

    # 删除指定元素上面的属性
    for eachEl in options['target']:
        tmp = root.getElementsByTagName(eachEl)
        if len(tmp) > 0:
            for each in tmp:
                for eachAttr in options['removeAttr']:
                    if each.hasAttribute(eachAttr):
                        each.removeAttribute(eachAttr)

    # 读取宽和高
    width = height = 0
    if root.hasAttribute('width') and root.hasAttribute('height'):
        width = root.getAttribute('width').strip('px')
        height = root.getAttribute('height').strip('px')
    else:
        return print('无法读取目标 width 和 height')

    # 给 svg 添加 viewbox属性
    root.setAttribute('viewbox', "0 0 {} {}".format(width, height))

    # 保存文件
    f = open(os.path.join(outputDir, filename), 'w', encoding='utf-8')
    DOM.writexml(f, encoding='utf-8')
    f.close()

if (__name__ == "__main__"):
    # 默认处理当前目录下的 input
    tar = os.path.abspath('./input')
    tar = os.path.abspath('D:/CPS/MyProject/Electron-fileWatcher/src/renderer/pages/fileWatcher/js/config/icon')

    # 可通过外部参数进行
    if len(sys.argv) > 1:
        print('当前输入是%s' % sys.argv[1])
        tar = sys.argv[1]

    # 遍历目录对每个svg进行处理
    fileList = os.listdir(tar)
    for each in fileList:
        t = os.path.join(os.path.abspath(tar), each)
        updateSvg(t)
